/*
#include <math.h>

struct Matrix33
{
	float mV[9];

	void set(int row, int col, int value)
	{
		mV[row+3*col] = value;
	}

	float get(int row, int col)
	{
		return mV[row+3*col];
	}

	void print()
	{
		for (int i = 0; i < 3; i++)
		{
			for (int j = 0; j < 3; j++)
			{
				std::cout << this->get(i,j) << "  " ;
			}
			std::cout << "\n";
		}
	}

};

struct Matrix22
{
	float mV[2][2];

	void set(int row, int col, float value)
	{
		mV[row][col] = value;
	}

	float get(int row, int col)
	{
		return mV[row][col];
	}

	void print()
	{
		for (int i = 0; i < 2; i++)
		{
			for (int j = 0; j < 2; j++)
			{
				std::cout << this->get(i,j) << "  " ;
			}
			std::cout << "\n";
		}
	}

};


struct Vector
{
	float x,y,z;
	float initialX, initialY;
	bool isNormalized;

	Vector (float _x, float _y)
	{
		x= _x;
		y=_y;
		initialX = _x;
		initialY = _y;
		isNormalized = false;
	}

	Vector (float _x, float _y, float _z)
	{
		x=_x;
		y=_y;
		z=_z;
	}

	float Length()
	{
		return sqrt((x*x) + (y*y));
	}

	void Normalize()
	{
		if (isNormalized == false)
		{
		float length = this->Length();
		x = x/length;
		y = y/length;
		isNormalized = true;
		}

	}

	void Reset()
	{
		x = initialX;
		y = initialY;
	}

	float dot(Vector otherVector)
	{
		return x*otherVector.x + y*otherVector.y;
	}

	void add(Vector otherVector)
	{
		x += otherVector.x;
		y += otherVector.y;
	}

	void multiply(Matrix22 Mat)
	{
		int xTemp, yTemp;
		xTemp = x*Mat.get(0,0) + y*Mat.get(0,1);
		yTemp = x*Mat.get(1,0) + y*Mat.get(1,1);

		x=xTemp;
		y=yTemp;
	}

};




Matrix22 makeRotationMatrix(float angle)
{
	Matrix22 Mat;

	Mat.set(0,0,cos(angle));
	Mat.set(0,1,-sin(angle));
	Mat.set(1,0,sin(angle));
	Mat.set(1,1,cos(angle));

	//std::cout<<sin(angle);

	return Mat;
}

//Functions for Matrices
Vector MultVector(Vector Vec, Matrix33 Mat)
{
	Vector result (0,0,0);

	result.x = Mat.mV[0] * Vec.x + Mat.mV[3] * Vec.y + Mat.mV[6] * Vec.z;
	result.y = Mat.mV[1] * Vec.x + Mat.mV[4] * Vec.y + Mat.mV[7] * Vec.z;
	result.z = Mat.mV[2] * Vec.x + Mat.mV[5] * Vec.y + Mat.mV[8] * Vec.z;

	return result;
}

Matrix33 multiplyMatrix( Matrix33 matrix, Matrix33 other)
{
	Matrix33 result;

		result.mV[0] = matrix.mV[0] * other.mV[0] + matrix.mV[3] * other.mV[1] * matrix.mV[6]*other.mV[2];
		result.mV[1] = matrix.mV[1] * other.mV[0] + matrix.mV[4] * other.mV[1] * matrix.mV[7]*other.mV[2];
		result.mV[2] = matrix.mV[2] * other.mV[0] + matrix.mV[5] * other.mV[1] * matrix.mV[8]*other.mV[2];
		
		result.mV[3] = matrix.mV[0] * other.mV[3] + matrix.mV[3] * other.mV[4] * matrix.mV[6]*other.mV[5];
		result.mV[4] = matrix.mV[1] * other.mV[3] + matrix.mV[4] * other.mV[4] * matrix.mV[7]*other.mV[5];
		result.mV[5] = matrix.mV[2] * other.mV[3] + matrix.mV[5] * other.mV[4] * matrix.mV[8]*other.mV[5];

		result.mV[6] = matrix.mV[0] * other.mV[6] + matrix.mV[3] * other.mV[7] * matrix.mV[6]*other.mV[8];
		result.mV[7] = matrix.mV[1] * other.mV[6] + matrix.mV[4] * other.mV[7] * matrix.mV[7]*other.mV[8];
		result.mV[8] = matrix.mV[2] * other.mV[6] + matrix.mV[5] * other.mV[7] * matrix.mV[8]*other.mV[8];

		return result;
}



//Functions for Vectors
Vector AddVectors(Vector Vec1, Vector Vec2)
{
	return Vector(Vec1.x + Vec2.x, Vec1.y + Vec2.y);
}

Vector SubtractVectors(Vector Vec1, Vector Vec2)
{
	return Vector(Vec1.x - Vec2.x, Vec1.y - Vec2.y);
}

Vector MultVector(float scalar, Vector Vec)
{
	return Vector(Vec.x * scalar, Vec.y * scalar);
}

void updateVector(Vector& startPoint, Vector& endPoint, Matrix22 rotationMatrix, Vector translationVector = Vector(0,0))
{
	startPoint.multiply(rotationMatrix);
	endPoint.multiply(rotationMatrix);
	startPoint.add(translationVector);
	endPoint.add(translationVector);
}

*/